package misListasDobles;

public class ListasDobles {
	
	private NodeDoble inicio;
	
	public ListasDobles(){
		
		inicio = null;
	}
	
	public NodeDoble getInicio(){
		
		return inicio;
	}
	
	public void setInicio(NodeDoble valor){
		
		inicio = valor;
		
	}
	
	public boolean listaVacia(){
		
		return inicio==null;  
	}
	
	public void agregarInicio(String valor){
		NodeDoble nodeNew = new NodeDoble(valor,inicio,null);
		if(!listaVacia())
		{
			inicio.setBack(nodeNew);
		}
		
		setInicio(nodeNew);
	}
	
	public void agregarFinal(String valor){
		
		NodeDoble NodePtr;
		NodeDoble nodoNew;
		
		if(size()==0) agregarInicio(valor);
		{
			NodePtr = inicio;
			
			while(NodePtr.getNext()!=null){
				NodePtr = NodePtr.getNext();
			}
			
			nodoNew = new NodeDoble(valor,null,NodePtr);
			NodePtr.setNext(nodoNew);
		}
		
	}
	
	public String borrarInicio(){
		
		String valor = "";
		
		if(size()==0) valor ="Lista vacia";
		else
			if(size() ==  1)
			{
				valor = inicio.getData();
				inicio = null;
			}
			else
			{
				valor = inicio.getData();
				inicio.getNext().setBack(null);
				inicio = inicio.getNext();
			}
		
		return valor;
	}
	
	public String borrarFinal(){
			  
	  	
		NodeDoble NodePtr;
		String valor;
		
		if(size()==0) valor = "LISTA VACIA";
		else
			if(size()==1) {
				valor = inicio.getData();
				inicio=null;
			}
			else {
				NodePtr = inicio;
				while(NodePtr.getNext().getNext() != null) {
					
					NodePtr = NodePtr.getNext();
				}
				
				valor = NodePtr.getNext().getData();
				NodePtr.setNext(null);
			}
		
		return valor;
	}
	
	public int size(){
		
		int total = 0;
		NodeDoble nodePtr;
		
		nodePtr = inicio;
		
		while(nodePtr != null){
			
			nodePtr = nodePtr.getNext();
			total++;
		}
		
		
		return total;
	}
	
	public String toString(){
	  
	  NodeDoble NodePtr;
	  String Lista;
	  
	  NodePtr = inicio;
	  Lista ="";
	  
	  while(NodePtr != null)
	  {
		  Lista += NodePtr.getData() + "->";
		  NodePtr = NodePtr.getNext();
	  }
	  	Lista+="null";
	  	return Lista;
	}
	
}